package com.tuanzhang.mall.seller.infrastructure.repository;

import com.tuanzhang.mall.seller.domain.aggregate.Seller;
import com.tuanzhang.mall.seller.domain.valueobj.CompanyInfo;
import com.tuanzhang.mall.seller.domain.valueobj.PhoneNumber;

import java.util.List;

/**
 * 类功能描述
 *
 * @author wangyl
 * @date 2025/6/16
 */
public interface SellerRepository {

    /**
     * 保存
     *
     * @param seller 要保存的卖家对象
     */
    void save(Seller seller);

    /**
     * 保存或更新
     *
     * @param seller
     */
    void saveOrUpdate(Seller seller);

    /**
     * 根据ID查找用例
     *
     * @param phoneNumber 用例的唯一标识符
     * @return 返回找到的对象，如果不存在则返回null
     */
    Seller findByPhoneNumber(PhoneNumber phoneNumber);

    /**
     * 批量查询
     *
     * @param phoneNumbers 用例的唯一标识符列表
     * @return 返回找到的列表，如果某些用例不存在，则不会包含在返回列表中
     */
    List<Seller> batchQuery(List<PhoneNumber> phoneNumbers);

    /**
     * 删除
     *
     * @param phoneNumber 唯一标识符
     */
    void delete(PhoneNumber phoneNumber);

    /**
     * 更新用例
     *
     * @param seller 要更新对象
     */
    void update(Seller seller);

    /**
     * 根据唯一标识符判断是否存在
     *
     * @param phoneNumber 唯一标识符
     * @return 如果存在则返回true，否则返回false
     */
    boolean exists(PhoneNumber phoneNumber);

    /**
     * 根据名称和营业执照ID判断是否存在
     *
     * @param name        名称
     * @param companyLicenseId 营业执照ID
     * @return 如果存在则返回true，否则返回false
     */
    boolean existsByNameAndLicenseId(String name, String companyLicenseId);

    /**
     * 检查公司信息是否重复
     * @param company 公司信息
     * @return
    */
    boolean existsCompanyInfo(CompanyInfo company);


    /**
     * 检查公司信息是否重复
     * @param phoneNumber 公司信息
     * @return
     */
    boolean existsPhoneNumber(PhoneNumber phoneNumber);
}
